package io.gitee.wiqer.simple;

import java.util.Arrays;

public class SolutionNC63_IsContinuous {
    /**
     * 现在有2副扑克牌，从扑克牌中随机五张扑克牌，我们需要来判断一下是不是顺子。
     * 有如下规则：
     * 1. A为1，J为11，Q为12，K为13，A不能视为14
     * 2. 大、小王为 0，0可以看作任意牌
     * 3. 如果给出的五张牌能组成顺子（即这五张牌是连续的）就输出true，否则就输出false。
     * 4.数据保证每组5个数字，每组最多含有4个零，数组的数取值为 [0, 13]
     *
     * 要求：空间复杂度 O(1)O(1)，时间复杂度 O(nlogn)O(nlogn)，本题也有时间复杂度 O(n)O(n) 的解法
     * @param numbers
     * @return
     */
    public boolean isContinuous(int [] numbers) {
        if(numbers==null||numbers.length==0)
            return false;
        //排序
        Arrays.sort(numbers);
        int kingnum=0;
        //得出0的个数，i最后为第一个非0数
        for( int i=0;i<numbers.length;i++)
        {
            if(numbers[i]==0)
            {
                kingnum++;
            }
            else break;
        }
        int queshi=0;
        for(int j=kingnum+1;j<numbers.length;j++ )
        {
            //如果有相等则不构成顺子
            if(numbers[j]==numbers[j-1])
                return false;
            //缺失个数
            if(numbers[j]-1!=numbers[j-1]){
                queshi+=numbers[j]-numbers[j-1]-1;
            }

        }
        //缺失数字个数大于0的个数
        if(queshi>kingnum)
            return false;
        return true;

    }
}
